/**
 * 
 */
package com.enjoyor.soa.traffic.api.service.dubbo.idcs;

import com.enjoyor.soa.traffic.api.dto.idcs.ControlPassDto;
import com.enjoyor.soa.traffic.api.dto.idcs.ControlPassStatusDto;
import com.enjoyor.soa.traffic.util.pojo.Page;
import com.enjoyor.soa.traffic.util.pojo.ResultPojo;

import java.util.List;

/**
 * 过车布控记录服务
 * 
 * @author ly
 *
 */
public interface DubboControlPassService {

	/**
	 * 获取过车布控记录列表
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param passId
	 *            记录编号
	 * @param vehiclePlate
	 *            号牌号码
	 * @param plateType
	 *            号牌类型
	 * @param level
	 *            布控等级
	 * @param controlStatus
	 *            布控状态
	 * @param controlType
	 *            布控类型
	 * @param bayonetIds
	 *            卡口编号列表
	 * @param startTime
	 *            查询开始时间
	 * @param endTime
	 *            查询结束时间
	 * @param controlIds
	 *            布控车辆编号
	 * @param vehicleType
	 *            车辆类型
	 * @param startSpeed
	 *            查询速度区间
	 * @param endSpeed
	 *            查询速度区间
	 * @param manageDept
	 *            部门编号，多个用逗号隔开
	 * @return List<ControlPass> 过车布控记录列表
	 */
	public ResultPojo getControlPassList(String systemKey, String token, String passId, String vehiclePlate,
			String plateType, String level, String controlStatus, List<String> controlType, List<String> bayonetIds,
			String bayonetName, String startTime, String endTime, List<String> controlIds, String vehicleType,
			Integer startSpeed, Integer endSpeed, String offScene, List<String> list_control_result);

	/**
	 * 工作量统计
	 * 
	 * @param startTime
	 * @param endTime
	 * @param deptIds
	 * @param deal_person
	 * @return
	 */
	public ResultPojo listWorkloadStat(String systemKey, String token, String startTime, String endTime,
			List<String> deptIds, String deal_person);

	public ResultPojo pageWorkloadStat(String systemKey, String token, String startTime, String endTime,
			List<String> deptIds, String deal_person, Page page);

	/**
	 * 获取过车布控记录分页列表
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param passId
	 *            记录编号
	 * @param vehiclePlate
	 *            号牌号码
	 * @param plateType
	 *            号牌类型
	 * @param level
	 *            布控等级
	 * @param controlStatus
	 *            布控状态
	 * @param controlType
	 *            布控类型
	 * @param bayonetIds
	 *            卡口编号列表
	 * @param startTime
	 *            查询开始时间
	 * @param endTime
	 *            查询结束时间
	 * @param controlIds
	 *            布控车辆编号
	 * @param vehicleType
	 *            车辆类型
	 * @param startSpeed
	 *            查询速度区间
	 * @param endSpeed
	 *            查询速度区间
	 * @param manageDept
	 *            部门编号，多个用逗号隔开
	 * @param page
	 *            分页
	 * @return Page<ControlPass> 过车布控记录分页列表
	 */
	@SuppressWarnings("rawtypes")
	public ResultPojo getControlPassPage(String systemKey, String token, String passId, String vehiclePlate,
			String plateType, String level, String controlStatus, List<String> controlType, List<String> bayonetIds,
			String bayonetName, String startTime, String endTime, List<String> controlIds, String vehicleType,
			int startSpeed, int endSpeed, String offScene, List<String> list_control_result, Page page);

	public ResultPojo countControlPassByType(String systemKey, String token, List<String> controlType);

	/**
	 * 新增过车布控记录
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param controlPass
	 *            过车布控记录
	 * @return String 记录编号
	 */
	public ResultPojo insertControlPass(String systemKey, String token, ControlPassDto controlPass);

	/**
	 * 更新布控记录
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param recordId
	 *            记录编号
	 * @param dto
	 *            变更内容
	 * @return String 更新记录编号
	 */
	public ResultPojo updateControlStatusByPassId(String systemKey, String token, String recordId,
			ControlPassStatusDto dto);

	/**
	 * 根据号牌号码更新布控记录
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param vehiclePlate
	 *            号牌号码
	 * @param plateType
	 *            号牌类型
	 * @param startTime
	 *            更新开始时间
	 * @param endTime
	 *            更新结束时间
	 * @param dto
	 *            变更内容
	 * @return String 更新记录编号
	 */
	public ResultPojo updateControlStatusByPlate(String systemKey, String token, String vehiclePlate, String plateType,
			String controlStatus, String startTime, String endTime, ControlPassStatusDto dto);

	/**
	 * 根据状态获取布控量
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param controlStatus
	 *            布控状态
	 * @param startTime
	 *            查询开始时间
	 * @param endTime
	 *            查询结束时间
	 * @return Map<String,int>
	 */
	public ResultPojo getControlCountByStatus(String systemKey, String token, String controlStatus, String startTime,
			String endTime);

	/**
	 * 根据布控类型获取当日布控总量
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param controlType
	 *            布控类型
	 * @param controlStatus
	 *            布控状态
	 * @param startTime
	 *            查询开始时间
	 * @param endTime
	 *            查询结束时间
	 * @return Map<String, Object> 类型对应数据量
	 */
	public ResultPojo getControlPassCountByTypeAndStatus(String systemKey, String token, String controlType,
			String controlStatus, String startTime, String endTime);

	/**
	 * 获取布控数据每小时量
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param date
	 *            查询日期，如 2017-11-20
	 * @return Map<String, Object> 每小时数据量
	 */
	public ResultPojo getControlHourList(String systemKey, String token, String date, String hour, String control_code,
			String control_status);

	/**
	 * 根据时间获取布控数据每小时量
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param startTime
	 *            开始时间
	 * @param endTime
	 *            结束时间
	 * @return Map<String, Object> 每小时数据量
	 */
	public ResultPojo getControlPassHourCount(String systemKey, String token);

	/**
	 * 获取卡口布控数量列表
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param bayonetIds
	 *            点位编号列表
	 * @param startTime
	 *            开始时间
	 * @param endTime
	 *            结束时间
	 * @return List<Map<String,Object>> 卡口布控数量列表
	 */
	public ResultPojo getBayonetControlCountList(String systemKey, String token, List<String> bayonetIds,
			String startTime, String endTime);

	/**
	 * 获取卡口布控数量列表
	 * 
	 * @param systemKey
	 * @param token
	 * @param startTime
	 * @param endTime
	 * @param bayonetIds
	 * @return
	 */
	public ResultPojo statControlByBayonetType(String systemKey, String token, String startTime, String endTime,
			List<String> bayonetIds);

	/**
	 * 布控报警总量
	 * 
	 * @param map
	 * @return
	 */
	public ResultPojo getControlPassNum(String regionId, String startTime, String endTime, String single);

	/**
	 * 布控类型报警排名
	 * 
	 * @param map
	 * @return
	 */
	public ResultPojo statControlByRegionType(String regionId, String startTime, String endTime, String single);

	/**
	 * 根据受控passId查询区域Id
	 * 
	 * @param passId
	 * @return
	 */
	public String getRegionIdByPassId(String passId, String passPlate);

	/**
	 * 统计各卡口20分钟内报警数据（选定布控类型内）
	 * 
	 * @param startTime
	 * @param endTime
	 * @param listType
	 * @return
	 */
	public ResultPojo statControlByBayonet(String strTime, List<String> listType);

	/**
	 * 插入关联信息，插入布控过车和点位相关的拦截点警员关联
	 * 
	 * @param systemKey
	 * @param token
	 * @param pass_id
	 * @param intercept_ids
	 * @return
	 */
	public ResultPojo insertPassUser(String systemKey, String token, String pass_id, List<String> intercept_ids);

	/**
	 * 根据警员编号获取布控信息
	 * 
	 * @param systemKey
	 * @param token
	 * @param startTime
	 * @param endTime
	 * @param personId
	 * @return
	 */
	public ResultPojo getControlPassListByUser(String systemKey, String token, String startTime, String endTime,
			String personId);

	/**
	 * 获取警员-过车编号关联
	 * 
	 * @param systemKey
	 * @param token
	 * @param passId
	 * @param vehiclePlate
	 * @param plateType
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	public ResultPojo listRltPassUser(String systemKey, String token, String passId, String vehiclePlate,
			String plateType, String startTime, String endTime);

	/**
	 * 工作量排名
	 * 
	 * @param startTime
	 * @param endTime
	 * @return
	 */
	public ResultPojo statWorkload(String systemKey, String token, String startTime, String endTime);

	/**
	 * 工作量详情
	 * 
	 * @param systemKey
	 * @param token
	 * @param control_result
	 * @param deal_person
	 * @param start_time
	 * @param end_time
	 * @return
	 */
	public ResultPojo statWorkloadDetail(String systemKey, String token, String control_result, String deal_person,
			String start_time, String end_time);

	/**
	 * 统计首页->今日布控报警总量->误报、中断、拦截
	 * 
	 * @param map
	 * @return
	 */
	public ResultPojo statCurrentControlDeal(List<String> regions, String start_time, String end_time);

	/**
	 * 连续N天在同一点位（一小时内）经过的记录
	 * 
	 * @param systemKey
	 * @param token
	 * @param bayonetIds
	 * @param vehicle_plate
	 * @param time
	 * @param days
	 * @param control_types
	 * @return
	 */
	public ResultPojo statControlTrack(String systemKey, String token, String bayonetIds, String vehicle_plate,
			String vehicle_plate_type, String time, int days, String control_types);
	

	public ResultPojo pageStatControlTrack(String systemKey, String token, String bayonetIds, String vehicle_plate,
			String vehicle_plate_type, String time, int days, String control_types, Page page);
	
}
